package com.lvy.hczn.front.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lvy.hczn.front.system.domain.business.TemperatureZone;
import com.lvy.hczn.front.system.domain.business.Warehouse;
import com.lvy.hczn.front.system.domain.system.SysArea;
import com.lvy.hczn.mq.rocket.ParamInfo;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface WarehouseService extends IService<Warehouse> {

    /**
     * 获取当前仓库
     *
     * @return
     */
    Warehouse selectLocalWarehouseFront();

    /**
     * 列表查询
     *
     * @param warehouse
     * @return
     */
    List<Warehouse> getPageList(Warehouse warehouse);

    /**
     * 新增
     *
     * @param warehouse
     * @return
     * @throws Exception
     */
    int saveData(Warehouse warehouse, boolean sync) throws Exception;

    /**
     * 生成仓库编号
     *
     * @param warehouseParamInfo
     * @return
     * @author yw
     * @date 2023-05-14 18:02:24
     */
    String generateWarehouseCode(ParamInfo<Warehouse> warehouseParamInfo);

    /**
     * 修改
     *
     * @param warehouse
     * @return
     * @throws Exception
     */
    int updateData(Warehouse warehouse) throws Exception;

    /**
     * 仓库初始化时，同时异步获取基本配置信息
     *
     * @param warehouse
     * @return void
     * @author yw
     * @date 2023-05-20 14:57:29
     */
    void initBaseData(Warehouse warehouse);

    /**
     * 总仓绑定运营区域
     *
     * @param request
     * @param list
     * @return
     * @author yw
     * @date 2023-05-23 20:06:06
     */
    void bindingRegionInfo(HttpServletRequest request, List<ParamInfo> list);

    /**
     * 平台修改仓库联系人和电话发送到数据中心
     *
     * @param warehouse
     */
    void updateByIdFromPlatForm(Warehouse warehouse);

    /**
     * 获取运营区域topic
     *
     * @param warehouse
     * @return
     */
    String selectRegionAreaTopic(Warehouse warehouse);

    /**
     * 温区信息修改，同步到数据中心，数据中心同步到平台
     *
     * @param temperatureZone
     */
    void updateToTransmitByTemperatureZoneChanged(TemperatureZone temperatureZone);


    /**
     * 获取总仓列表
     *
     * @param info
     * @return
     */
    List<Warehouse> parentList(ParamInfo<Warehouse> info);

    /**
     * 绑定省市区域
     *
     * @param warehouse
     * @return
     */
    Warehouse bindingSysAreaById(Warehouse warehouse);

    /**
     * 初始化仓库时，需根据区编码和运营区域编码生成基本仓库信息
     * 因为目前设计为：以一个区域为topic，区域下的总仓和前置仓在区域topic下进行的数据监听
     * 即：一个区域topic，负责区域内所有仓库信息交互，
     *
     * @param
     * @return void
     * @author yw
     * @date 2023-05-28 18:24:51
     */
    Warehouse initWarehouse();
}
